﻿#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import random
import unittest
import sys

sys.path.append(r"../src/opt/qonso")

from QonsoExtractorSFR import QonsoExtractorSFR
from QonsoModel import QonsoModel

class TestExtractorSFR(unittest.TestCase):
   def setUp(self):
      pass

   def tearDown(self):
      pass

   def test_SFRIllimithycs3G(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFRIllimithycs3G.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "1h20 min")
      self.assertEqual(model.GetConsoVoix('int'), 80)

      self.assertEqual(model.GetReport('int'), 3)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 03 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "3h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 180)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0.12 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), u"Prochaine facture : 24 mai 2010")
      
      self.assertEqual(model.GetLastTime(), u"Ma consommation au 7 mai 2010 &agrave; 10h05")
      self.assertEqual(model.GetForfait(), 'Illimythics 3G+')
      
   def test_SFREntreprise(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFR_entreprise.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "2h10 min")
      self.assertEqual(model.GetConsoVoix('int'), 130)

      self.assertEqual(model.GetReport('int'), 0)
      self.assertEqual(model.GetReport('str'), "Pas de minutes report&eacute;es ce mois ci")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "7h30 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 450)

      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0.48 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), u"Prochaine facture : 25 avril 2010")
      
      self.assertEqual(model.GetLastTime(), u"Ma consommation au 7 avril 2010 &agrave; 17h49")
      self.assertEqual(model.GetForfait(), 'SFR Entreprises 450')

   def test_SFRIllimithycs3GFullInternet(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFRIllimithycs3GFullInternet.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "00 min")
      self.assertEqual(model.GetConsoVoix('int'), 0)

      self.assertEqual(model.GetReport('int'), 180)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 3h00 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "6h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 360)

      self.assertEqual(model.GetConsoVoixSupp('str'), '37 min')
      self.assertEqual(model.GetConsoVoixSupp('int'), 37)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), "Prochaine facture : 5 septembre 2010")
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 11 mai 2010 &agrave; 23h10")
      self.assertEqual(model.GetForfait(), 'Illimythics 3G+ Full Internet')
      

   def test_SFRIllimithycs3GFullInternet2(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFRIllimithycs3GFullInternet2.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "26 min")
      self.assertEqual(model.GetConsoVoix('int'), 26)

      self.assertEqual(model.GetReport('int'), 180)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 3h00 min")
      
      self.assertEqual(model.GetConsoVoixMax('str'), "6h00 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 360)

      self.assertEqual(model.GetConsoVoixSupp('str'), '47 min')
      self.assertEqual(model.GetConsoVoixSupp('int'), 47)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0.00 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), u"Prochaine facture : 5 septembre 2010")
      
      self.assertEqual(model.GetLastTime(), u"Ma consommation au 17 juin 2010 &agrave; 8h08")
      self.assertEqual(model.GetForfait(), 'Illimythics 3G+ Full Internet')      
      
   def test_SFRFormulePersoAvantage(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFR_FormulePersoAvantage.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "11 min")
      self.assertEqual(model.GetConsoVoix('int'), 11)

      self.assertEqual(model.GetConsoVoixMax('str'), "1h11 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 71)

      self.assertEqual(model.GetReport('int'), 11)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 11 min")
      
      self.assertEqual(model.GetConsoVoixSupp('str'), '02 min')
      self.assertEqual(model.GetConsoVoixSupp('int'), 2)

      self.assertEqual(model.GetConsoVoixSuppMax('str'), '30 min')
      self.assertEqual(model.GetConsoVoixSuppMax('int'), 30)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0.00 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), u"Prochaine facture : 10 septembre 2010")
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 15 mai 2010 &agrave; 17h59")
      self.assertEqual(model.GetForfait(), 'SFR Perso Avantage')      
      

   def test_SFRIllimithycs5EssentielXL(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFRIllimithycs5EssentielXL.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(model.GetConsoVoix('str'), "57 min")
      self.assertEqual(model.GetConsoVoix('int'), 57)

      self.assertEqual(model.GetConsoVoixMax('str'), "2h50 min")
      self.assertEqual(model.GetConsoVoixMax('int'), 170)

      self.assertEqual(model.GetReport('int'), 50)
      self.assertEqual(model.GetReport('str'), "Report de minutes : 50 min")
      
      self.assertEqual(model.GetConsoVoixSupp('str'), None)
      self.assertEqual(model.GetConsoVoixSupp('int'), None)

      self.assertEqual(model.GetConsoVoixSuppMax('str'), None)
      self.assertEqual(model.GetConsoVoixSuppMax('int'), None)

      self.assertEqual(model.GetConsoData('int'), 0)
      self.assertEqual(model.GetConsoDataMax('int'), 0)
      
      self.assertEqual(model.GetConsoSMS(), '0')
      self.assertEqual(model.GetConsoSMSMax(), '0')

      self.assertEqual(model.GetConsoHorsForfait(), "0.00 &euro;")
      self.assertEqual(model.GetDateProchaineFacture(), u"Prochaine facture : 5 septembre 2010")
      
      self.assertEqual(model.GetLastTime(), "Ma consommation au 17 mai 2010 &agrave; 12h06")
      self.assertEqual(model.GetForfait(), 'Illimythics 5 Essentiel')
      
   def test_SFRerrorCode(self):
      ex = QonsoExtractorSFR()
      
      model = QonsoModel()
      ex.SetModel( model )
      f = open(r"data/SFRerrorCode.html")
      data = f.read()
      f.close()
      ex.ExtractDatas(data)
      
      self.assertEqual(ex.status, 'ERROR')
      res = (ex.context.find("reconnues. Veuillez recommencer")>0)
      self.assertEqual( res, True )
      